import yt_dlp as youtube_dl
import logging

# 配置日志记录
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

def download_video(url, cookies_file=None, proxy=None):
    """
    下载指定 URL 的视频。

    :param url: 视频的 URL
    :param cookies_file: Cookies 文件路径（可选）
    :param proxy: 代理服务器地址（可选）
    """
    ydl_opts = {
        'format': 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best',  # 下载最佳质量的 MP4 格式
        'outtmpl': '%(title)s.%(ext)s',  # 输出文件名格式
        'subtitleslangs': ['en'],  # 下载英文字幕
        'writeautomaticsub': True,  # 自动生成字幕
        'quiet': True,  # 禁用 yt-dlp 的默认输出
        'no_warnings': True,  # 忽略警告
    }

    # 如果提供了 Cookies 文件，添加到配置中
    if cookies_file:
        ydl_opts['cookiefile'] = cookies_file
        logging.info(f"使用 Cookies 文件: {cookies_file}")

    # 如果提供了代理服务器，添加到配置中
    if proxy:
        ydl_opts['proxy'] = proxy
        logging.info(f"使用代理服务器: {proxy}")

    try:
        with youtube_dl.YoutubeDL(ydl_opts) as ydl:
            logging.info(f"开始下载视频: {url}")
            ydl.download([url])
            logging.info("视频下载完成！")
    except youtube_dl.utils.DownloadError as e:
        logging.error(f"下载失败: {e}")
    except Exception as e:
        logging.error(f"发生未知错误: {e}")

if __name__ == '__main__':
    # 获取用户输入
    video_url = input("请输入视频 URL: ")
    cookies_file = "cookies.txt"
    proxy = "" or None

    # 调用下载函数
    download_video(video_url, cookies_file, proxy)